<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            padding: 0;
            margin: 0;
            list-style: none;
        }

        .lb {
            width: 900px;
            height: 505px;
            margin: 100px auto;
            background-color: blue;
            position: relative;
            box-shadow: 0 0 8px black;
            overflow: hidden;
        }

        .lb ol {
            width: 2700px;
            transform: translateX(0);
            transition: 0.2s linear;
        }

        .lb ol li {
            float: left;

        }

        .lb ul {
            position: absolute;
            bottom: 0;
            left: 50%;
            transform: translateX(-50%);
            margin-bottom: 20px;
        }

        .lb ul li {
            width: 36px;
            height: 20px;
            border-radius: 5px;
            background-color: black;
            float: left;
            margin-left: 20px;
            opacity: 0.5;
        }

        .lb ul li:hover {
            background-color: #768895;
        }

        .btnl {
            border: none;
            width: 70px;
            height: 160px;
            position: absolute;
            bottom: 200px;
            left: 0;
            /* background-color: black; */
            opacity: 0.5;
            color: #fff;
            display: none;
            z-index: 99;
            font-size: 30px;
        }

        .btnr {
            border: none;
            width: 70px;
            height: 160px;
            position: absolute;
            bottom: 200px;
            right: 0;
            /* background-color: black; */
            opacity: 0.5;
            color: #fff;
            display: none;
            z-index: 99;
            font-size: 30px;
        }

        .btnl:hover {
            background-image: linear-gradient(-90deg, rgba(255, 255, 255, 0.8), transparent);

        }

        .btnr:hover {
            background-image: linear-gradient(90deg, rgba(255, 255, 255, 0.8), transparent);
        }

        .lb ul li:hover {
            background-color: #768895 !important;
        }
    </style>
</head>

<body>
    <div class="lb">
        <button class="btnl">&lt;</button>
        <button class="btnr">&gt;</button>
        <ol></ol>
        <ul></ul>
    </div>
    <script>
        // 获取图的个数
        // 写这个可以动态添加图片的个数，和下面的点的个数
        var imgs = ["https://www.jq22.com/demo/jquerylbt202112220954/images/t1.png",
            "https://www.jq22.com/demo/jquerylbt202112220954/images/t2.png",
            "https://www.jq22.com/demo/jquerylbt202112220954/images/t3.png",
            "https://www.jq22.com/demo/jquerylbt202112220954/images/t1.png"]
        // ol下面放的是图片
        var ol = document.querySelector('.lb').querySelector('ol'); // 创建ol下的li 就要获取ol
        var str = '';
        imgs.forEach(function (item) { // 动态创建li，有几张图就创建几个li，也可以用for循环写
            str += `<li><img src=${item} alt=""></li>`
            ol.innerHTML = str;
        });
        // ul下面放的是点
        var ul = document.querySelector('.lb').querySelector('ul'); // 创建ul下的li 就要获取ol
        var str1 = '';
        for (let i = 0; i < imgs.length; i++) { // 动态创建li，有几张图就创建几个li,也就是创建几个点
            str1 += `<li></li>`;
            ul.innerHTML = str1;
        }
        // 获取元素
        var btnl = document.querySelector('.btnl');
        var btnr = document.querySelector('.btnr');
        var lb = document.querySelector('.lb');
        var lis = document.querySelector('.lb').querySelector('ul').querySelectorAll('li');
        // 鼠标移到盒子里面左右两个按钮显示出来
        lb.addEventListener('mouseover', function () {
            btnl.style.display = 'block';
            btnr.style.display = 'block';
            btnl.style.backgroundColor = 'black';
            btnr.style.backgroundColor = 'black';
            clearInterval(time); // 鼠标移到盒子内 移除计时器
        })
        // 鼠标移到盒子外面左右两个按钮隐藏起来
        lb.addEventListener('mouseleave', function () {
            btnl.style.display = 'none';
            btnr.style.display = 'none';
            time = setInterval(timer, 2000); // 鼠标移到盒子外 创建计时器
        })
        // 点击下面的三个点 会跳转到相应的位置
        var moveWidth = lb.offsetWidth; // 获取窗口的宽度 就是一次要位移的宽度
        console.log(moveWidth);
        // let img = document.querySelector('img');
        // console.log(img);
        // var moveWidth = img.clientWidth;
        // console.log(img.clientWidth);
        for (let i = 0; i < lis.length; i++) {
            lis[i].onclick = function () {
                var x = moveWidth * i; // 计算位置的量 900为一张图片的宽度
                ol.style.transform = `translateX(${-x}px)` // 添加2d位移
            }
            lis[i].addEventListener('click', function () {
                for (let k = 0; k < lis.length; k++) { // 排他思想 下面变色前 先把之前的颜色清除为三个点原来的颜色
                    lis[k].style.backgroundColor = 'black'
                }
                lis[i].style.backgroundColor = '#A1B5C3'; // 点击时变色
                j = i; // 并把所索引的值给j，否者j还是从原来的0++，图片跟按钮的顺序会变化
            })
        }
        var j = 0; // 声明一个计数器
        btnr.addEventListener('click', function () { // 点击事件
            j++; // 点击右边的按钮j+1
            if (j > imgs.length - 1) j = 0; // 当j到imgs.length-1的时候在++时，因为右边没有图片了，就另j=imgs.length-1也就是最大值为imgs.length-1
            ol.style.transform = `translateX(${-moveWidth * j}px)`; // 图片位移的值
            for (let k = 0; k < lis.length; k++) { // 排他思想 下面变色前 先把之前的颜色清除为三个点原来的颜色
                lis[k].style.backgroundColor = 'black'
            }
            lis[j].style.backgroundColor = '#A1B5C3';// 设置 下面三个点也随着图片的移动而变色

        })
        btnl.addEventListener('click', function () {
            j--; // 点击左边按钮j-1
            if (j < 0) j = imgs.length - 1; // 与上述同理
            ol.style.transform = `translateX(${-moveWidth * j}px)`;// 图片位移的值
            for (let k = 0; k < lis.length; k++) { // 排他思想 下面变色前 先把之前的颜色清除为三个点原来的颜色
                lis[k].style.backgroundColor = 'black'
            }
            lis[j].style.backgroundColor = '#A1B5C3';// 设置 下面三个点也随着图片的移动而变色
        })
        var time = setInterval(timer, 2000); // 创建一个计时器 间隔为2s 并调用timer函数
        function timer() { // 创建timer函数
            j++; // 每2s执行的时候自加1
            if (j > imgs.length - 1) {
                j = 0;  // 当到最大值的时候，也就是到最后一张图的时候，令j=0
            };
            ol.style.transform = `translateX(${-moveWidth * j}px)`; // 每次位移的值
            for (let k = 0; k < lis.length; k++) { // 排他思想 下面变色前 先把之前的颜色清除为三个点原来的颜色
                lis[k].style.backgroundColor = 'black'
            }
            lis[j].style.backgroundColor = '#A1B5C3';// 设置 下面三个点也随着图片的移动而变色
        }
    </script>
</body>

</html>